#pragma once

#include "driver/i2c.h"
#include "esp_err.h"

// SHT30默认I2C地址
#define SHT30_ADDR_DEFAULT 0x44  // 如果ADDR引脚接地，地址为0x44；如果接VDD，地址为0x45

// SHT30错误码定义
typedef enum {
    SHT30_OK = 0,                    // 操作成功
    SHT30_ERR_NOT_FOUND = -1,        // 未找到设备
    SHT30_ERR_CRC_FAILED = -2,       // CRC校验失败
    SHT30_ERR_I2C_COMM_FAILED = -3,  // I2C通信失败
    SHT30_ERR_INVALID_DATA = -4      // 数据无效
} sht30_err_t;

// SHT30配置结构体
typedef struct {
    i2c_port_t i2c_port;     // I2C端口号
    uint8_t dev_addr;        // 设备地址
    gpio_num_t sda_gpio;     // SDA引脚
    gpio_num_t scl_gpio;     // SCL引脚
    uint32_t freq_hz;        // I2C频率
} sht30_config_t;

/**
 * @brief 初始化SHT30设备
 * 
 * @param config SHT30配置参数
 * @return sht30_err_t 
 *         - SHT30_OK: 成功
 *         - SHT30_ERR_NOT_FOUND: 未找到设备
 *         - SHT30_ERR_I2C_COMM_FAILED: I2C通信失败
 */
sht30_err_t sht30_init(const sht30_config_t *config);

/**
 * @brief 获取温湿度数据
 * 
 * @param temperature 温度值（摄氏度）
 * @param humidity 湿度值（相对湿度%）
 * @return sht30_err_t 
 *         - SHT30_OK: 成功
 *         - SHT30_ERR_CRC_FAILED: CRC校验失败
 *         - SHT30_ERR_I2C_COMM_FAILED: I2C通信失败
 *         - SHT30_ERR_INVALID_DATA: 数据无效
 */
sht30_err_t sht30_read_data(float *temperature, float *humidity);